<?php
    if (!defined('ZT')) exit;
 
    class Archivo {
        static function chdir($ruta)
        {
            return new ZT_Chdir($ruta);
        }
        
        static function unlink($ruta)
        {
            return @unlink($ruta);
        }
    
        static function mkdir($ruta)
        {
            mkdir($ruta);
            chmod($ruta, 0755);
        }
        
        static function copy($origen, $destino)
        {
            copy($origen, $destino);
            chmod($destino, 0644);
        }
        
        static function rename($origen, $destino)
        {
            rename($origen, $destino);
            chmod($destino, 0644);
        }
        
        static function zip($origen, $destino, $nombre)
        {
            $nombre = str_replace("\\", '/', $nombre);
            $nombre_len = strlen($nombre);
        
            $datos = file_get_contents($origen);
            $crc = crc32($datos);
            $u_len = strlen($datos);

            $datos = gzcompress($datos);   
            $datos = substr($datos, 2, strlen($datos) - 6);
            $c_len = strlen($datos);
            
            $res = "\x50\x4b\x03\x04\x14\x00\x00\x00\x08\x00\x00\x00\x00\x00";  
            $res .= pack('V', $crc);
            $res .= pack('V', $c_len);
            $res .= pack('V', $u_len);
            $res .= pack('v', $nombre_len);
            $res .= pack('v', 0 );
            $res .= $nombre;
            $res .= $datos;   
            $res .= pack('V', $crc);
            $res .= pack('V', $c_len);
            $res .= pack('V', $u_len);
            $fr_len = strlen($res);
            
            $res .= "\x50\x4b\x01\x02\x00\x00\x14\x00\x00\x00\x08\x00\x00\x00\x00\x00";
            $res .= pack('V', $crc);
            $res .= pack('V', $c_len);
            $res .= pack('V', $u_len);
            $res .= pack('v', $nombre_len);
            $res .= pack('v', 0 );
            $res .= pack('v', 0 );
            $res .= pack('v', 0 );
            $res .= pack('v', 0 ); 
            $res .= pack('V', 32 );
            $res .= pack('V', 0);
            $res .= $nombre;
            $cd_len = strlen($res) - $fr_len;

            $res .= "\x50\x4b\x05\x06\x00\x00\x00\x00";  
            $res .= pack('v', 1);
            $res .= pack('v', 1);
            $res .= pack('V', $cd_len);
            $res .= pack('V', $fr_len);
            $res .= "\x00\x00";
            
            file_put_contents($destino, $res); 
        }
        
        static function unzip($origen, $destino)
        {
            $zip = new ZipArchive( );

            if ($zip->open($origen)) {
                $zip->extractTo($destino);
                $zip->close( );
            }
        }
        
        static function scandir($ruta)
        {
            $handle = @opendir($ruta);
            
            if ($handle) {
                $archivos = array( );
                
                for (;;) {
                    $actual = readdir($handle);
                    
                    if (!$actual) {
                        break;
                    }

                    if ($actual != '.' && $actual != '..') {
                        $archivos[] = $actual;
                    }
                }
                
                return $archivos;
            }
        }
                
        static function rmdir($ruta)
    	{        
            $handle = @opendir($ruta);
            
            if ($handle) {
                for (;;) {
                    $actual = readdir($handle);
                    
                    if (!$actual) {
                        break;
                    }

                    if ($actual != '.' && $actual != '..') {
                        $actual = "$ruta/$actual";
                         
                        if (is_dir($actual)) {
                            self::rmdir($actual);
                        }
                        else if (!is_link($actual)) {
                            unlink($actual);
                        }
                    }
                }
                
                closedir($handle);
                rmdir($ruta);
            }
        }
    }
    
    class ZT_Chdir {
        private $ruta;
        
        function __construct($ruta)
        {
            $this->ruta = getcwd( );
            chdir($ruta);
        }
        
        function __destruct( )
        {
            chdir($this->ruta);
        }
    }
?>